package view;

import java.util.ArrayList;
import java.util.Scanner;
import other.Doenca;
import other.Paciente;

public class Entrada {

    String decisao;
    Scanner tec = new Scanner(System.in);
    
    public String menuInicial(ArrayList<Doenca> listadeDoencas, ArrayList<Paciente> listadePacientes, int contadorD, int contadorP ) {
        System.out.println("Realizar Cadastro de Doenças ou Pacientes --- 1    Realizar Consultas --- 2    Sair --- 3");
        decisao = tec.next();
        
        switch (decisao) {
            case "1":
                cadastros(listadeDoencas, listadePacientes, contadorD, contadorP);
                break;
            case "2":
                escolherConsulta(listadeDoencas, listadePacientes, contadorD, contadorP);
                break;
            case "3":
                System.exit(0);
                break;

            default:
                System.out.println("Caracter inválido, digite novamente...");
                return menuInicial(listadeDoencas, listadePacientes, contadorD, contadorP);
        }

        return "";
    }
 
    
    public String cadastros(ArrayList<Doenca> listadeDoencas, ArrayList<Paciente> listadePacientes, int contadorD, int contadorP) {
        System.out.println("Cadastrar Doenças --- 1   Cadastrar Pacientes --- 2  Voltar ao Menu Principal --- 3");
        decisao = tec.next();
        switch (decisao) {
            case "1":
                cadDoenca(listadeDoencas, listadePacientes, contadorD, contadorP);
                break;
            case "2":
                cadPaciente(listadeDoencas, listadePacientes, contadorD, contadorP);
                break;
            case "3":
                menuInicial(listadeDoencas, listadePacientes, contadorD, contadorP);
                break;

            default:
                System.out.println("Caracter inválido, digite novamente...");
                return cadastros(listadeDoencas, listadePacientes, contadorD, contadorP);
        }
        return "";
    }

    

    public String cadDoenca(ArrayList<Doenca> listadeDoencas, ArrayList<Paciente> listadePacientes, int contadorD, int contadorP) {
        if(contadorD == listadeDoencas.size()){
            System.out.println("Todas as doencas já foram cadastradas");
            return cadastros(listadeDoencas, listadePacientes, contadorD, contadorP);
        }else{
        System.out.println("-------------------------------------------------------"
                + "\nDigite o nome da Doença: ");
         
        decisao = tec.next();
        listadeDoencas.get(contadorD).setNome(decisao);
        
        //Sintomas da doença
        System.out.println("\nDigite um sintoma da doença: ");
        decisao = tec.next();
        
        listadeDoencas.get(contadorD).setSintoma(decisao);
        
        System.out.println("\nDigite outro sintoma da doença: ");
        decisao = tec.next();
        
         if((listadeDoencas.get(contadorD).getSintoma().get(0).toString()).equalsIgnoreCase(decisao)) {              //impede que o usuario cadastre o mesmo sintoma para uma doenca
             while((listadeDoencas.get(contadorD).getSintoma().get(0).toString()).equalsIgnoreCase(decisao)){
             System.out.println("\nDigite um sintoma diferente");
             decisao = tec.next();     
             }
         }   
        listadeDoencas.get(contadorD).setSintoma(decisao);
        
        
        //Medicamentos
        System.out.println("\nDigite um medicamento para doença: ");
        decisao = tec.next();
        listadeDoencas.get(contadorD).setMedicamento(decisao);
        

        System.out.println("\nDigite outro medicamento para doença: ");
        decisao = tec.next();
        
         if((listadeDoencas.get(contadorD).getMedicamento().get(0).toString()).equalsIgnoreCase(decisao)){          //impede que o usuario cadastre o mesmo medicamento para uma doenca
             while((listadeDoencas.get(contadorD).getMedicamento().get(0).toString()).equalsIgnoreCase(decisao)){
             System.out.println("\nDigite um medicamento diferente");
             decisao = tec.next();     
             }
         }
         
        listadeDoencas.get(contadorD).setMedicamento(decisao);

        System.out.println("\nFim do cadastro de doença.");
        contadorD++;
        return cadastros(listadeDoencas, listadePacientes, contadorD, contadorP);
        }
    }

    
    
    public String cadPaciente(ArrayList<Doenca> listadeDoencas, ArrayList<Paciente> listadePacientes, int contadorD, int contadorP) {
        if(contadorP == listadePacientes.size()){
            System.out.println("Todos os pacientes já foram cadastradas");
            return cadastros(listadeDoencas, listadePacientes, contadorD, contadorP);
        }else{
        System.out.println("-------------------------------------------------------"
                + "\nDigite o nome do Paciente: ");
        decisao = tec.next();
        listadePacientes.get(contadorP).setNome(decisao);
        
        System.out.println("\nDigite o sexo do paciente: Masculino --- 1    Feminino --- 2");
        int decisaoint = tec.nextInt();
        boolean parar=false;
        
        switch (decisaoint) {                                     // operaçao que testa oq o usuario digitou e suas consequencias para o mesmo
            case 1:
                listadePacientes.get(contadorP).setSexo("Masculino");
                break;
            case 2:
                listadePacientes.get(contadorP).setSexo("Feminino");
                break;
            
            default:{                                                     
                while(parar == false){                                             // laço que impede que o usuario digite um inteiro invalido
                 System.out.println("\nCaracter inválido, digite novamente...");
                 System.out.println("\nDigite o sexo do paciente: Masculino --- 1    Feminino --- 2");
                 decisaoint = tec.nextInt(); 
                if(decisaoint == 1)
                    parar = true;
                if(decisaoint == 2)
                    parar = true;
                }
                 
                if(decisaoint == 1){                  //atribuiçoes
                    listadePacientes.get(contadorP).setSexo("Masculino");
                }else{
                    listadePacientes.get(contadorP).setSexo("Feminino");
                }
            }
                break;
        }    
       
        System.out.println("\nDigite a idade do paciente: ");
        int idade = tec.nextInt();
        listadePacientes.get(contadorP).setIdade(idade);
        
        
        System.out.println("\nFim do cadastro de paciente");
        contadorP++;
        return cadastros(listadeDoencas, listadePacientes, contadorD, contadorP);
        }
      }

    
    
    public String escolherConsulta(ArrayList<Doenca> listadeDoencas, ArrayList<Paciente> listadePacientes, int contadorD, int contadorP){
        System.out.println("-------------------------------------------------------");
        System.out.println("Digite o numero correspondente ao paciente para realizar a consultar");
        for(int i = 1; i < listadePacientes.size()+1; i++){
         System.out.println("\n"+listadePacientes.get(i).getNome()+" --- "+i);    
        }
        
        decisao = tec.next();
        switch(decisao){
            case "1":
                contadorP = 1;
                return consulta(listadeDoencas, listadePacientes, contadorD, contadorP);
            case "2":
                contadorP = 2;
                return consulta(listadeDoencas, listadePacientes, contadorD, contadorP);
            case "3":
                contadorP = 3;
                return consulta(listadeDoencas, listadePacientes, contadorD, contadorP);    
            case "4":
                contadorP = 4;
                return consulta(listadeDoencas, listadePacientes, contadorD, contadorP);
            case "5":
                contadorP = 4;
                return consulta(listadeDoencas, listadePacientes, contadorD, contadorP);
            default:
                System.out.println("\nCaracter inválido! Digite novamente!");
                return escolherConsulta(listadeDoencas, listadePacientes, contadorD, contadorP);
        }
    }
    
    
    
    public String consulta(ArrayList<Doenca> listadeDoencas, ArrayList<Paciente> listadePacientes, int contadorD, int contadorP) {
        
        System.out.println("Digite o Primeiro Sintoma do Paciente: ");
        decisao = tec.next();
        listadePacientes.get(contadorP).setSintomaPaciente(decisao);
        
        System.out.println("\nDigite o Segundo Sintoma do Paciente: ");
        decisao = tec.next();
        
        if((listadePacientes.get(0).getSintomaPaciente().toString()).equalsIgnoreCase(decisao)){
             while((listadePacientes.get(0).getSintomaPaciente().toString()).equalsIgnoreCase(decisao)){
             System.out.println("\nDigite um sintoma diferente");
             decisao = tec.next();     
             }
         }
        
        listadePacientes.get(contadorP).setSintomaPaciente(decisao);
        return consultaCompara(listadeDoencas, listadePacientes, contadorD, contadorP);
        }
    
    
    
    public String consultaCompara(ArrayList<Doenca> listadeDoencas, ArrayList<Paciente> listadePacientes, int contadorD, int contadorP){
        int cont=0;                       // variavel que controla a comtapibilidade dos sintomas do paciente com as das doencas

        for (int i = 0; i <  listadePacientes.get(contadorP).getSintomaPaciente().size(); i++) {     //laços for aninhados com a funçao de chegar as arraylists do paciente e da doenca
            for(int j = 0; j < listadeDoencas.get(contadorD).getSintoma().size(); j++){ 
            
                if ((listadePacientes.get(contadorP).getSintomaPaciente().get(i).toString()).equalsIgnoreCase(listadeDoencas.get(contadorD).getSintoma().get(j).toString())){
                cont++;
                   
                   if(cont == 2){
                    System.out.println("\nDoença: " + listadeDoencas.get(contadorD).getNome());
                    System.out.println("Sintomas: " + listadeDoencas.get(contadorD).getSintoma());
                    System.out.println("Medicamentos: " + listadeDoencas.get(contadorD).getMedicamento());
                    System.out.println("\nConsulta realizada com sucesso");
                    System.out.println("Deseja receber outro diagnostico Tecle '1' \nSe não Tecle '2'");
                    decisao = tec.next(); 
                    
                    switch(decisao){
                        case "1":
                        return consultaCompara(listadeDoencas, listadePacientes, contadorD, contadorP);  
                        
                        case "2":   
                        return cadastros(listadeDoencas, listadePacientes, contadorD, contadorP); 
                            
                        default:
                            System.out.println("Caracter invalido! Digite novamente!");
                            return consultaCompara(listadeDoencas, listadePacientes, contadorD, contadorP);
                    }
                   }
                 }  
               }
             }
        
           System.out.println("\nNenhuma diagnostico encontrado para estes sintomas");
           return cadastros(listadeDoencas, listadePacientes, contadorD, contadorP);
        
        
    }

    
}
    
    
    